home *** CD-ROM | disk | FTP | other *** search
/ Revista CD Expert 32 / CD Expert nº 32.iso / Army Men TiS / data1.cab / Required_Files / rules / caf_ai.txt < prev    next >
Text File  |  1999-10-08  |  5KB  |  175 lines

  1. // this gets loaded on the host if the @1 army is AI controlled
  2.  
  3. // @1 = color to do AI for, @2 = color of enemy, @3 = value for @1Action variable
  4. macro caf_ai_enemy 3
  5. {
  6.     // these events setup the @1Action variable
  7.  
  8.     // before attacking @2 make sure @2 is in the game and is not an ally
  9.     if @1SetCapture@2 testvar IsColorInGame @2 > 0 and IsAlly @1 @2 = 0
  10.     and @1Captured@2Flag = 0 then
  11.         setvar @1Action @3,
  12.         trigger @1PerformAction
  13.  
  14.     if @1PerformAction testvar @1Action = @3 then
  15.         order @1sarge1 follow @2flag1 inmode attack,
  16.         order @1 group 1 follow @1sarge1 inmode defend,
  17.         order @1 group 2 follow @2flag1 inmode attack,
  18.         order @1 group 3 follow @2flag1 inmode attack
  19.  
  20.     // these events choose new actions if my flag is captured by an enemy
  21.  
  22.     if pickedup @1flag1 by @2 testvar isAlly @1 @2 = 0 and @1Action < 5 then
  23.         setvar @1Action 4,
  24.         trigger @1PerformAction
  25.  
  26.     // these events choose new actions if I capture an enemy flag
  27.  
  28.     if pickedup @2flag1 by @1 testvar isAlly @1 @2 = 0 and @1Captured@2Flag = 0 then
  29.         setvar @1Action 5,
  30.         trigger @1PerformAction
  31.  
  32.     // these events choose new actions if any other flag is captured by an enemy
  33.  
  34.     if pickedup @2flag1 testvar @1Action < 4
  35.     and isAlly @1 @2 = 0 and @1Captured@2Flag = 0 then
  36.         setvar @1Action @3,
  37.         trigger @1PerformAction
  38. }
  39.  
  40. // @1 = color to do AI for, @2 = color of flag
  41. macro caf_check_holding_my_flag 2
  42. {
  43.     if @1CheckIfHoldingFlags testvar hasitem @1sarge1 @2flag1 = 1 then
  44.         setvar @1Action 5,
  45.         trigger @1PerformAction
  46. }        
  47.  
  48. // @1 = color to do AI for, @2 = color of flag
  49. macro caf_check_holding_flag 2
  50. {
  51.     if @1CheckIfHoldingFlags testvar hasitem @1sarge1 @2flag1 = 1
  52.     and @1Captured@2Flag = 0 then
  53.         setvar @1Action 5,
  54.         trigger @1PerformAction
  55. }        
  56.  
  57. // @1 = color of army to do AI for, @2-@4 = other colors
  58. // @5 = letters to identify flagbase (e.g. "b" for blue, "gr" for grey)
  59. macro caf_ai_macro 5
  60. {
  61.     // maintain a variable which knows when we are on our base pad
  62.     // this is used if we accidentally pickup our own flag and we are already on our base
  63.     variable @1OnBase 0
  64.  
  65.     if padon @1base then
  66.         setvar @1OnBase 1
  67.  
  68.     if padoff @1base then
  69.         setvar @1OnBase 0
  70.  
  71.     // This variable holds the current action for @1
  72.     // 0 means no action, 1 means goto @2 flag, 2 means goto @3 flag, 3 means goto @4 flag,
  73.     // 4 means rescue @1 flag, 5 means take flag to base
  74.     variable @1Action 0
  75.  
  76.     if startup1 then
  77.         triggerdelay 1000 @1ChooseNewAction,
  78.         triggerdelay 2000 @1RegularOrders
  79.  
  80.     if @1ChooseNewAction then
  81.         setvar @1Action 0,
  82.         trigger @1CheckIfHoldingFlags,
  83.         trigger @1ChooseAction,
  84.         trigger @1StartTimeOut
  85.  
  86.     // if it's time to choose a new action but we are currently holding a flag then we should
  87.     // always choose to take it to a base
  88.  
  89.     expand caf_check_holding_my_flag ( @1 @1 )
  90.     expand caf_check_holding_flag ( @1 @2 )
  91.     expand caf_check_holding_flag ( @1 @3 )
  92.     expand caf_check_holding_flag ( @1 @4 )
  93.         
  94.     // if @1 has no current action then pick a random action
  95.     // keep doing this until an action is set
  96.     if @1ChooseAction testvar @1Action = 0 then
  97.         trigger @1PickRandomAction,
  98.         triggerdelay 1000 @1ChooseAction
  99.  
  100.     if @1PickRandomAction then random
  101.         trigger @1SetCapture@2,
  102.         trigger @1SetCapture@3,
  103.         trigger @1SetCapture@4
  104.  
  105.     expand caf_ai_enemy ( @1 @2 1 )
  106.     expand caf_ai_enemy ( @1 @3 2 )
  107.     expand caf_ai_enemy ( @1 @4 3 )
  108.  
  109.     // this event is for rescuing our own flag
  110.     if @1PerformAction testvar @1Action = 4 then
  111.         order @1sarge1 follow @1flag1 inmode attack,
  112.         order @1 group 1 follow @1sarge1 inmode defend,
  113.         order @1 group 2 follow @1flag1 inmode attack,
  114.         order @1 group 3 follow @1flag1 inmode attack
  115.  
  116.     // this event is for taking an enemy flag to my base
  117.     if @1PerformAction testvar @1Action = 5 then
  118.         order @1sarge1 goto @1base inmode standfire,
  119.         order @1 group 1 follow @1sarge1 inmode defend,
  120.         order @1 group 2 goto near@1base inmode attack,
  121.         order @1 group 3 goto near@1base inmode attack
  122.  
  123.     // these events choose new actions if I rescue my own flag
  124.  
  125.     if pickedup @1flag1 by @1 testvar @1OnBase = 0 then
  126.         setvar @1Action 5,
  127.         trigger @1PerformAction
  128.  
  129.     if pickedup @1flag1 by @1 testvar @1OnBase = 1 then
  130.         triggerdelay 100 @1Drop@1Flag
  131.  
  132.     if @1Drop@1Flag then
  133.         dropitem @1sarge1 @1flag1 @5flagbase
  134.  
  135.     // these events chose a new action if we get an enemy flag to home base
  136.  
  137.     if padon @1base then
  138.         triggerdelay 1000 @1ChooseNewAction
  139.  
  140.     // if we get our own flag back to base then drop that too
  141.  
  142.     if padon @1base testvar hasitem @1sarge1 @1flag1 = 1 then
  143.         dropitem @1sarge1 @1flag1 @5flagbase
  144.  
  145.     // these events choose new actions if a sarge is killed
  146.  
  147.     if killed @1sarge1 then
  148.         triggerdelay 5000 @1ChooseNewAction
  149.  
  150.     // these are the standing order regardless of what mode sarge is in
  151.         
  152.     if @1RegularOrders then
  153.         trigger @1PerformAction,
  154.         setaimode @1 group 4 defend,
  155.         setaimode @1 group 5 defend,
  156.         order @1 group 7 goto near@1base inmode defend,
  157.         triggerdelay 5000 @1RegularOrders
  158.  
  159.     // timeout code - if mode has not changed for a while then change it
  160.  
  161.     variable @1TimeOutVar 0
  162.     variable @1LastTimeOutVar 1
  163.  
  164.     if @1StartTimeOut then
  165.         addvar @1TimeOutVar 1,
  166.         triggerdelay 120000 @1CheckTimeOut
  167.  
  168.     if @1CheckTimeOut testvar @1TimeOutVar = @1LastTimeOutVar then
  169.         trigger @1ChooseNewAction
  170.  
  171.     if @1CheckTimeOut testvar @1TimeOutVar <> @1LastTimeOutVar then
  172.         addvar @1LastTimeOutVar 1
  173. }
  174.  
  175.